/**
 * pharma-business - 27 févr. 2011
 * guillaume
 */
package org.bspv.pharma.business.rules;

/**
 * Interface commune aux règles de gestion.
 * @author guillaume
 *
 */
public interface Specification<T> {

    /**
     * Retourne vrai si la règle de gestion est validée pour le candidat.
     * @param candidate Candidat
     * @return booleen
     */
    boolean isSatisfiedBy(T candidate);
    
    /**
     * 
     * @param specification
     * @return
     */
    Specification<T> or(Specification<T> specification);
    
    /**
     * 
     * @param specification
     * @return
     */
    Specification<T> and(Specification<T> specification);
    
    /**
     * 
     * @return
     */
    Specification<T> not();
}
